iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 18

Day18_structure物件介紹與建立

  • 分享至 

  • xImage
  •  

原文連結:Declaring a Structured Data Object

structure 物件

定義

structure變數是一種ABAP的特殊物件及資料型別。之前所學習到的變數都只能存單一的值,但當我們從資料庫讀一筆資料時,舉例而言,讀取航班資訊,會包含出發機場與抵達機場這兩個獨立的變數值,如果想把這兩個資料視為同一組資料存在一起,可以使用 structure變數,拿來操作表格資料十分好用。

https://ithelp.ithome.com.tw/upload/images/20240914/20113802uk0zW2HEuM.png

可以將structure視為能儲存一列(row)表格資料的結構,因此structure中能存有多個欄位格。舉例而言,如上圖中connection_full 這個structure內可包含航班資料表不同欄位的值,並且對欄位值進行與普通變數相同的操作。

建立structure

structure有許多宣告方式,大致有以下幾種:

  • 如同建立變數的流程,先用TYPE建立structure的自訂義型別,再根據該型別建立structure實體。
  • 參照既有的全域structure物件來建立。
  • 從視圖與資料庫直接建立structure。

以下分別介紹全域與區域的structure型別。

Structured 資料型別

gobal structure type

全域structure是可以在任意處使用的資料型別,例如用來定義變數訊息的SYMSG。

DATA message TYPE SYMSG.

https://ithelp.ithome.com.tw/upload/images/20240914/20113802qcxFO2SuOt.png
當游標移至該型別並按下F2時,可以看到SYMSG structure中包含了七個變數元件,以及他們各自的名稱、類型與描述。按下F3則會直接跳轉至定義該structure型別的程式碼。

定義structure的語法與定義表格非常相似,在DEFINE STRUCTURE後命名structure,並用大括號{}來列出structure中的欄位資料。在欄位資料名稱後通常會接的是char、int等常見的資料型別,但也能接structure TYPE,可以形成成巢狀的structure結構。

額外程式碼則會定義在DEFINE STRUCTURE之前,用標籤為structure添加額外屬性 。

local structure type

宣告本地的structure型別分成兩種方法。
1.用TYPES定義local的structure型別,以TYPES BEGIN OF <structure type name>開頭,以 TYPES END OF <structure type name>結尾,並在中間定義欄位資料。

*宣告structure型別
TYPES BEGIN OF st_connection.
TYPES    airport_from_id TYPE /dmo/airport_from_id.
TYPES    airport_to_id   TYPE /dmo/airport_to_id.
TYPES    carrier_name    TYPE /dmo/carrier_name.
TYPES  END OF st_connection.
       
*建立structure
DATA connection TYPE st_connection.
  1. 另一種比較簡短的寫法則是在TYPES後加上冒號:,分別以BEGIN OF還有END OF 作為開頭與結尾,並且中間定義欄位資料時以逗號,作劃分。
*宣告structure型別(簡短寫法)
TYPES: BEGIN OF st_connection,
         airport_from_id TYPE /dmo/airport_from_id,
         airport_to_id   TYPE /dmo/airport_to_id,
         carrier_name    TYPE /dmo/carrier_name,
       END OF st_connection.
       
*建立structure
DATA connection TYPE st_connection.

以上宣告方式建立的structure,僅能在當前程式作用域中執行。

另外,除了變數,structure中也能定義欄位常數,但必需在宣告常數時就賦值。

補充:從Debugger模式檢視structure

https://ithelp.ithome.com.tw/upload/images/20240915/20113802JMrAGTLUKZ.png

在Debugger模式下,可以透過兩種方式檢視structure與其欄位變數:

  • 變數預覽(游標移至structure上方)
    在編輯器的structure名稱上方hover,即會顯示該structure底下欄位變數的值

  • 在變數視窗中顯示(雙擊structure)
    進一步雙擊structure名稱後將開啟變數視窗,除了欄位變數值,可以進一步看到資料型別及欄位長度的資訊。

明天會來介紹更多structure的詳細運作!


上一篇
Day17_CDS view
下一篇
Day19_structure賦值
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言